package com.gxa.xiaoucomeshome.mapper;

import com.gxa.xiaoucomeshome.pojo.Courier;
import org.apache.ibatis.annotations.MapKey;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;

/**
 * @author 万骞
 * @date 2022-06-07
 */

public interface CourierMapper {
    /**
     * 配送员登录
     *
     * @param phone    手机号
     * @param password 密码
     * @return Courier
     */
    Courier login(String phone, String password);

    /**
     * 查询当前登录配送员信息
     *
     * @param phone 配送员手机号
     * @return courier 配送员信息
     */
    Map<String, Object> selectByPhone(String phone);

    /**
     * 配送员首页
     * 到货时间为查询
     *
     * @param siteName 门店名字
     * @return 首页信息
     */
    @MapKey("order_id")
    List<Map<String, Object>> selectBySiteName(String siteName);

    /**
     * 配送员抢单
     *
     * @param phone 手机号
     * @param id    订单编号
     * @return 是否抢单成功
     */
    Integer updateForGrabOrders(String phone, String id);

    /**
     * 派单时间
     *
     * @param id 订单编号
     * @return 是否抢单成功
     */
    Integer updateDispatchTime(String id);

    /**
     * 配送员个人中心待取货
     *
     * @param phone 手机号
     * @return 获取待取货的数据
     */
    Map<String, Object> selectPendingPickup(String phone);

    /**
     * 配送员个人中心待送货
     *
     * @param phone 手机号
     * @return 获取待送货的数据
     */
    Map<String, Object> selectPendingDelivery(String phone);

    /**
     * 配送员个人中心签收成功
     *
     * @param phone 手机号
     * @return 获取签收成功的订单数据
     */
    Map<String, Object> selectSignedSuccessfully(String phone);

    /**
     * 配送员个人中心签收失败
     *
     * @param phone 手机号
     * @return 获取签收失败的订单数据
     */
    Map<String, Object> selectFailedToSign(String phone);

    /**
     * 获取该配送员密码
     *
     * @param phone 手机号
     * @return 密码
     */
    String selectPassword(String phone);

    /**
     * 修改配送员登录密码
     *
     * @param oldPassword 原密码
     * @param newPassword 新的密码
     */
    void updatePassword(String phone,String oldPassword, String newPassword);

    /**
     * 订单列表——待取货
     *
     * @param phone 配送员电话
     * @return 符合条件的Order集合
     */

    List<Map<String, Object>> getListPendingPickUp(String phone);

    /**
     * 取货功能——>修改订单状态(待取货->待送货)
     *
     * @param id 订单编号
     * @return 影响行数
     */
    Integer updateStatePickUp(String id);

    /**
     * 取货-取货时间
     *
     * @param id 订单id
     * @return 影响行数
     */
    Integer updateTimePickUp(String id);

    /**
     * 订单列表——待送货
     *
     * @param phone 配送员电话
     * @return 符合条件的Order相关集合
     */

    List<Map<String, Object>> getListPendingDelivery(String phone);


    /**
     * 签收成功-修改订单状态
     *
     * @param id 订单编号
     * @return 影响行数
     */
    Integer updateStateSignInSuccess(String id);

    /**
     * 签收失败-修改订单状态
     *
     * @param id 影响行数
     * @return 影响行数
     */
    Integer updateStateSignInFailed(String id);

    /**
     * 签收-签收时间
     *
     * @param id 订单id
     * @return 影响行数
     */
    Integer updateTimeSignIn(String id);

    /**
     * 签收成功(更新签收详情)
     *
     * @param desc   成功详情
     * @param remark 成功-备注
     * @param url1   图片1
     * @param url2  图片2
     * @param id     订单编号
     * @return 影响行数
     */
    Integer updateDetailSignInSuccess(@Param("desc") String desc, @Param("remark") String remark, @Param("url1") String url1, @Param("url2") String url2, @Param("id") String id);

    /**
     * 签收失败(更新签收详情)
     *
     * @param desc 详情
     * @param url1 图片1
     * @param url2 图片2
     * @param id   订单id
     * @return 影响行数
     */
    Integer updateDetailSignInFailed(@Param("desc") String desc, @Param("url1") String url1, @Param("url2") String url2, @Param("id") String id);

    /**
     * 退回功能-修改订单状态
     *
     * @param id 订单id
     * @param b  是否退回
     * @return 影响行数
     */
    Integer updateStateSendBack(String id, boolean b);

    /**
     * 订单列表——>签收成功
     *
     * @param phone 配送员电话
     * @return List
     */
    List<Map<String, Object>> getListSignInSuccess(String phone);

    /**
     * 订单列表——>签收失败
     *
     * @param phone 配送员手机
     * @return List
     */
    List<Map<String, Object>> getListSignInFailed(String phone);

    /**
     * 订单详情——>待取货
     *
     * @param id 订单id
     * @return 符合条件的Order相关
     */
    Map<String, Object> pendingPickUpDetail(String id);

    /**
     * 订单详情——>待送货
     *
     * @param id 订单id
     * @return 符合条件的Order相关
     */
    Map<String, Object> pendingDeliveryDetail(String id);

    /**
     * 订单详情——签收成功
     *
     * @param id 订单id
     * @return 符合条件的Order相关
     */
    Map<String, Object> signInSuccessDetail(String id);

    /**
     * 订单详情——签收失败
     *
     * @param id 订单id
     * @return 符合条件的Order相关
     */

    Map<String, Object> signInFailedDetail(String id);

    /**
     * 退回功能
     *
     * @param reason 原因
     * @param id     订单id
     * @return 影响行数
     */
    Integer updateSendBack(String reason, String id);
}
